﻿#pragma once
#define LK_MEMORYBUFFERS_
namespace LK
{
	struct MemoryBuffer
	{
		//线程同步对象
		SpinMutex mt;
		//标记可用的内存指针
		size_t mask;
		//记录内存指针
		unsigned char* arr[sizeof(size_t) * 8];
		//记录内存大小
		size_t sarr[sizeof(size_t) * 8];
		//构造函数
		MemoryBuffer() :mask(-1) { for (size_t i = 0; i < sizeof(size_t) * 8; ++i) { sarr[i] = 0; arr[i] = NULL; } }
		//析构函数
		~MemoryBuffer() { ClearNotUsingBuffer(); }
		//清理未使用的内存块
		void ClearNotUsingBuffer();
		//获取一块不小于指定大小的内存，内存指针写入pPointer指向的指针变量中，返回一个mask
		size_t GetBuffer(size_t size, unsigned char**pPointer);
		//释放指定的内存块
		void ReleaseBuffer(size_t mask, unsigned char*pointer);
	};

}